package controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

import modelo.Ingrediente;
import modelo.IngredienteDAO;
import modelo.Plantilla;
import modelo.PlantillaDAO;
import Vista.NewJDialogPlantilla;


public class ControladorPlantilla {
	private class DetallePlantilla {
		
		public DetallePlantilla(Ingrediente ing, double cant) {
			super();
			this.ing = ing;
			this.cant = cant;
		}
		
		public Ingrediente ing;
		double cant;
	}
	
	private NewJDialogPlantilla plan;
	ArrayList<DetallePlantilla> detalles;
	AbstractTableModel modelo;
	public ControladorPlantilla(JFrame frm) {
		plan = new NewJDialogPlantilla(frm, this);
		detalles =  new ArrayList<DetallePlantilla>();

		IngredienteDAO ingdao = new IngredienteDAO();
		Vector<Ingrediente> Ingredientes = ingdao.ConsultarIngredientes();
		
		plan.getjCmbIngrediente().setModel(new DefaultComboBoxModel(Ingredientes));
		
		plan.getjTxtCodigoProducto().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				PlantillaDAO dao = new PlantillaDAO();
				IngredienteDAO idao = new IngredienteDAO();
				
				Vector<Plantilla> vec = dao.ConsultarPlantillasPorProducto(plan.getjTxtCodigoProducto().getText());
				detalles = new ArrayList<DetallePlantilla>();
				for (Plantilla p : vec)
					detalles.add(new DetallePlantilla(idao.ConsultarIngrediente(p.getCodigoIngrediente()), p.getCantidad()));
				
				modelo.fireTableDataChanged();
			}
		});
		
		plan.getjBtoAceptar().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				PlantillaDAO dao = new PlantillaDAO();
				
				dao.EliminarPlantillaProducto(plan.getjTxtCodigoProducto().getText());
				for (DetallePlantilla det : detalles)
					dao.registrarPlantilla(new Plantilla(det.ing.getCodigoIngrediente(), plan.getjTxtCodigoProducto().getText(), det.cant));
				JOptionPane.showMessageDialog(null, " Plantilla registrada", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				plan.dispose();
			}
		});
		
		plan.getjBtoSalir().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				plan.dispose();
			}
		});
		plan.setVisible(true);
		modelo = new AbstractTableModel() {
			@Override
			public Object getValueAt(int rowIndex, int columnIndex) {
				DetallePlantilla ing = detalles.get(rowIndex);
				switch (columnIndex) {
				case 0: return ing.ing.getNombreIngrediente();
				case 1: return ing.cant;
				}
				return null;
			}
			@Override
			public String getColumnName(int col) {
				switch (col) {
				case 0: return "Nombre Ingrediente";
				case 1: return "Cantidad";
				}
				
				return null;
			} 
			
			
			@Override
			public int getRowCount() {
				
				return detalles.size();
			}

			@Override
			public int getColumnCount() {			
				return 2;
			}			
		};
		plan.getjTableIngrediente().setModel(modelo);

		plan.getjBtoAgregarP().addActionListener(new ActionListener() {		
			@Override
			public void actionPerformed(ActionEvent e) {
				if(plan.getjTxtCantidad().getText().isEmpty()){
					JOptionPane.showMessageDialog(null, " Debe colocar la cantidad", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				}
				else{
				detalles.add(new DetallePlantilla((Ingrediente) plan.getjCmbIngrediente().getSelectedItem(), Double.parseDouble(plan.getjTxtCantidad().getText())));
				modelo.fireTableDataChanged();
				}
				
			}
		});
		
		plan.getjBtoQuitarP().addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(plan.getjTableIngrediente().getSelectedRow() == -1){
					JOptionPane.showMessageDialog(null, " Debe Seleccionar un Ingrediente", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				}
				else{
				detalles.remove(plan.getjTableIngrediente().getSelectedRow());
				modelo.fireTableDataChanged();
				}
	        }
         });
		
		plan.getJBtoPlantillaBuscar().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				PlantillaDAO dao = new PlantillaDAO();		
				
				String pl = dao.ConsultarPlantilla(plan.getjTxtCodigoProducto().getText()); 
				if (pl == null){
					JOptionPane.showMessageDialog(null, "No existe.Puede continuar");
					plan.getjBtoAceptar().setEnabled(true);
				}
				else
					JOptionPane.showMessageDialog(null, "Producto existente, inserte otro codigo.");	
			}
		});
	}
}
